package com.xhf;

import com.sun.tools.attach.*;

import java.io.IOException;
import java.lang.instrument.Instrumentation;
import java.lang.instrument.UnmodifiableClassException;
import java.util.List;

public class AgentTest {
    /**
     * 以 vm 参数的方式载入，在 java 程序的 main 方法执行之前执行
     *
     * @param agentArgs
     * @param inst      Agent技术主要使用的 api，我们可以使用它来改变和重新定义类的行为
     */
    public static void premain(String agentArgs, Instrumentation inst) {
        System.out.println("premain start");

        System.out.println(agentArgs);
        inst.addTransformer(new DefineTransformer(), true);
    }

    /**
     * 以 Attach 的方式载入，在 Java 程序启动后执行
     */
    public static void agentmain(String agentArgs, Instrumentation inst) throws UnmodifiableClassException {
        System.out.println("agentmain start");
//        inst.addTransformer(new DefineTransformer(), true);
//        inst.retransformClasses(com.xhf.App.class);

        System.out.println(agentArgs);
    }

    public static void main(String[] args) throws IOException, AttachNotSupportedException, AgentLoadException,
            AgentInitializationException {
        System.out.println(2222);
        List<VirtualMachineDescriptor> list = VirtualMachine.list();
        System.out.println();
//        VirtualMachine virtualMachine = null;
//        try {
//            // 1100 是进程号
//            virtualMachine = VirtualMachine.attach("1340");
//            // 第一个参数是 agent jar包路径，第二个参数为传入 agentmain 的 args 参数
//            virtualMachine.loadAgent("D:\\workCode\\myLearn\\technology-share\\agent\\target/agent-0.0.1-SNAPSHOT.jar", "test");
//        } finally {
//            if (virtualMachine != null) {
//                virtualMachine.detach();
//            }
//        }

    }
}
